package cn.middle.remote.server;

import cn.middle.remote.Buffer;
import cn.middle.remote.functions.CallbackEvent;
import cn.middle.remote.functions.PushEventFunction;

public interface ServerListener {
	
	
	/**
	 * 链接事件
	 * @param clientId
	 */
	public void connectAfter(Integer clientId);
	
	/**
	 * 连接丢失
	 * @param clientId
	 */
	public void connectLost(Integer clientId);
	
	/**
	 * 异常事件
	 * @param clientId
	 * @param e
	 */
	public void exception(Integer clientId,Throwable e);
	/**
	 * 调用下发到边缘服务
	 * @param senderId 发送者标识
	 * @param targetId 接收者标识
	 * @param msgId 消息ID
	 * @param interfaceName 接口名称
	 * @param data 业务数据
	 */
	public void call(int senderId,int targetId,String msgId,String interfaceName,Buffer data);
	
	/**
	 *  边缘服务者回复调用者
	 * @param senderId 发送者标识
	 * @param targetId 接收者标识
	 * @param msgId 消息ID
	 * @param interfaceName 接口名称
	 * @param data 业务数据
	 */
	public void reply(int senderId,int targetId,String msgId,String interfaceName,Buffer data);
	
	/**
	 * 客户端登陆
	 * @param username
	 * @param password
	 * @param clientId
	 */
	public void login(String username,String password,Integer clientId);
	
	/**
	 * 获取边缘服务信息（应用端）
	 * @param clientId 调用者标识
	 * @param data 数据
	 */
	public void edge(CallbackEvent callback,Buffer data);
	
	/**
	 * 边缘服务注册信息
	 * @param clientId  调用者标识
	 * @param data  数据
	 */
	public void registryEdge(Integer clientId,Buffer data);
	
	/**
	 * 订阅事件
	 * @param clientId  调用者标识
	 * @param data  数据
	 */
	public void subscribe(Integer clientId,Buffer data);
	
	/**
	 * 边缘服务上报事件
	 * @param clientId  调用者标识
	 * @param data  数据
	 */
	public void event(PushEventFunction functions,Integer eventId,Buffer data);
	
	/**
	 * 返回ACK
	 * @param clientId
	 * @param msgId
	 */
	public void ack(Integer clientId,String msgId);
	
}
